#pragma once

#include <vector>

#include <physics_DebugVertex.h>

class I3D_System;
class IPhysicsRigid;
class IPhysicsJoint;
struct RigidBodyParam;
struct JointParam;

class IPhysicsSystem {
public:
	virtual ~IPhysicsSystem() {}
	virtual IPhysicsRigid* CreateRigid(RigidBodyParam &param) = 0;
	virtual IPhysicsJoint* CreateJoint(JointParam &param, IPhysicsRigid &rigid_1, IPhysicsRigid &rigid_2) = 0;
	virtual void StepSimulation() = 0;
	virtual void CreateDebugDraw(std::vector<PhysicsDebugVertex> &rVertex) = 0;
	virtual void DrawDebug() = 0;
protected:
	IPhysicsSystem() {}
};
